using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace BW.Mes.WinForms.Common
{
    public partial class VueWebViewDemoForm : DevExpress.XtraEditors.XtraForm
    {
        private VueWebView vueWebView;

        public VueWebViewDemoForm()
        {
            InitializeComponent();
            InitializeVueWebView();
        }

        private void InitializeComponent()
        {
            this.SuspendLayout();
            // 
            // VueWebViewDemoForm
            // 
            this.AutoScaleDimensions = new System.Drawing.SizeF(8F, 18F);
            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
            this.ClientSize = new System.Drawing.Size(1000, 700);
            this.Name = "VueWebViewDemoForm";
            this.Text = "Vue应用集成演示";
            this.Load += new System.EventHandler(this.VueWebViewDemoForm_Load);
            this.ResumeLayout(false);
        }

        private void InitializeVueWebView()
        {
            // 创建VueWebView控件
            vueWebView = new VueWebView();
            vueWebView.Dock = DockStyle.Fill;
            vueWebView.BaseUrl = "http://localhost:5173"; // Vue开发服务器URL
            vueWebView.Path = "/"; // Vue应用路径
            vueWebView.WebViewInitialized += VueWebView_Initialized;
            
            // 添加到表单
            this.Controls.Add(vueWebView);
        }

        private void VueWebViewDemoForm_Load(object sender, EventArgs e)
        {
            // 注册来自Vue应用的回调函数
            RegisterCallbacks();
        }

        private void VueWebView_Initialized(object sender, EventArgs e)
        {
            // WebView初始化完成后，可以执行一些操作
            Console.WriteLine("Vue WebView 初始化完成");
        }

        private void RegisterCallbacks()
        {
            // 注册可从Vue应用调用的C#函数
            
            // 获取用户信息示例
            vueWebView.RegisterJsCallback("getCurrentUser", async (data) =>
            {
                // 模拟获取当前用户信息
                await Task.Delay(500); // 模拟API调用
                
                // 返回用户信息JSON
                return Newtonsoft.Json.JsonConvert.SerializeObject(new
                {
                    id = 1,
                    username = "admin",
                    name = "系统管理员",
                    role = "admin",
                    permissions = new[] { "read", "write", "admin" }
                });
            });
            
            // 保存数据示例
            vueWebView.RegisterJsCallback("saveData", async (data) =>
            {
                try
                {
                    // 解析从Vue传来的数据
                    dynamic payload = Newtonsoft.Json.JsonConvert.DeserializeObject<dynamic>(data);
                    
                    // 打印接收到的数据
                    Console.WriteLine($"从Vue应用接收到数据: {data}");
                    
                    // 模拟保存操作
                    await Task.Delay(1000);
                    
                    // 返回成功消息
                    return Newtonsoft.Json.JsonConvert.SerializeObject(new
                    {
                        success = true,
                        message = "数据保存成功",
                        id = Guid.NewGuid().ToString()
                    });
                }
                catch (Exception ex)
                {
                    return Newtonsoft.Json.JsonConvert.SerializeObject(new
                    {
                        success = false,
                        message = $"保存失败: {ex.Message}"
                    });
                }
            });
            
            // 调用系统功能示例
            vueWebView.RegisterJsCallback("openForm", async (data) =>
            {
                try
                {
                    // 解析参数
                    dynamic args = Newtonsoft.Json.JsonConvert.DeserializeObject<dynamic>(data);
                    string formName = args.formName.ToString();
                    
                    // 在UI线程上执行
                    this.Invoke(new Action(() =>
                    {
                        MessageBox.Show($"请求打开窗体: {formName}", "系统消息", 
                            MessageBoxButtons.OK, MessageBoxIcon.Information);
                        
                        // 这里可以根据formName打开相应的窗体
                        // 例如: OpenForm(formName);
                    }));
                    
                    return Newtonsoft.Json.JsonConvert.SerializeObject(new { success = true });
                }
                catch (Exception ex)
                {
                    return Newtonsoft.Json.JsonConvert.SerializeObject(new
                    {
                        success = false,
                        message = ex.Message
                    });
                }
            });
        }

        /// <summary>
        /// 向Vue应用发送数据示例
        /// </summary>
        private async Task SendDataToVueApp()
        {
            var data = new
            {
                type = "notification",
                title = "系统通知",
                message = "有一条新的工单需要处理",
                time = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss")
            };
            
            await vueWebView.SendDataToVueAsync("system-message", data);
        }
    }
} 